package javamusic.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import javamusic.excepcion.DAOExcepcion;
import javamusic.modelo.Evento;
import javamusic.modelo.Local;
import javamusic.modelo.Producto;
import javamusic.modelo.Sala;
import javamusic.util.ConexionBDKaraoke;

public class EventoDAO extends BaseDAO  {
	
	public Evento insertar(Evento vo) throws DAOExcepcion {
		//mensaje ayuda para hacer debug
	System.out.println("EventoDAO: insertar(Evento vo)");
	String query = "INSERT INTO evento(nombre, fecha, capacidad, descripcion, elog, idlocal) VALUES (?,?,?,?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	
	try {
		con = ConexionBDKaraoke.obtenerConexion();
		stmt = con.prepareStatement(query);
		
		stmt.setString(1, vo.getNombre());
		stmt.setString(2, vo.getFecha());
		stmt.setInt(3, vo.getCapacidad());
		stmt.setString(4, vo.getDescripcion());
		stmt.setInt(5, vo.getElog());
		stmt.setInt(6, vo.getLocal().getIdlocal());
		
		//Ejecuta la operacion
		//Devuelve in int que indica el numero de filas afectadas
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar");
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
return vo;

}
	
	
/*
 * LISTAR EVENTO
 */

	public Collection<Evento> listar() throws DAOExcepcion {
		
	Collection<Evento> c = new ArrayList<Evento>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBDKaraoke.obtenerConexion();
		String query = "select idevento,nombre,fecha,capacidad,descripcion,elog,idlocal from evento order by nombre";
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();
		while (rs.next()) {
				Evento vo = new Evento();
				vo.setIdEvento(rs.getInt("idevento"));
				vo.setNombre(rs.getString("nombre"));
				vo.setFecha(rs.getString("fecha"));
				vo.setCapacidad(rs.getInt("capacidad"));
			    vo.setDescripcion(rs.getString("descripcion"));
			    vo.setElog(rs.getInt("elog"));
			  	    
			    Local local1 = new Local();
			    local1.setIdlocal(rs.getInt("idlocal"));
			  		    		    
			    vo.setLocal(local1);
			    
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

/*
 * 	BUSCAR	
 */
	
	public Collection<Evento> buscarPorNombre(String nombre) throws DAOExcepcion {
		System.out.println("EventoDAO: buscarPorNombre(String nombre)");
		String query = "SELECT idevento, nombre, fecha, capacidad, descripcion, elog, idlocal FROM evento WHERE nombre = ?";
		Collection<Evento> lista = new ArrayList<Evento>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBDKaraoke.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,  nombre  );
			rs = stmt.executeQuery();
			while (rs.next()) {
				Evento vo = new Evento();
				vo.setIdEvento(rs.getInt("idevento"));
				vo.setNombre(rs.getString("nombre"));
				vo.setFecha(rs.getString("fecha"));
				vo.setCapacidad(rs.getInt("capacidad"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setElog(rs.getInt("elog"));
				
				Local lo = new Local();
				lo.setIdlocal(rs.getInt("idlocal"));
				
				vo.setLocal(lo);
				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
/*
 *		MODIFICAR 
 */
	
	  public Evento actualizar(Evento vo) throws DAOExcepcion {
		   String query = "update evento set nombre=?, fecha=?, capacidad=?, descripcion=?, elog=? where idevento =?";
		   Connection con =null;
		   PreparedStatement stmt = null;
		   try {
			   con = ConexionBDKaraoke.obtenerConexion();
			   stmt =con.prepareStatement(query);
			   
			   stmt.setString(1, vo.getNombre());
			   stmt.setString(2, vo.getFecha());
			   stmt.setInt(3,vo.getCapacidad());
			   stmt.setString(4, vo.getDescripcion());
			   stmt.setInt(5, vo.getElog());
			   
			   stmt.setInt(6, vo.getIdEvento());
			   //stmt.setInt(7, vo.getLocal().getIdlocal());
			   
		       int  i = stmt.executeUpdate();
		       if(i !=1){
		    	  throw new SQLException("No se pudo actulizar");
		       }		
		   } catch (SQLException e) {
		          System.err.println(e.getMessage());
		          throw new DAOExcepcion(e.getMessage());
		   }finally{
			   this.cerrarStatement(stmt);
			   this.cerrarConexion(con);
		   }
		     return vo;
	   }
	  
	  /* 
		*  PROCEDIMIENTOS DE PRODUCTO - ELIMINAR
		*/
	  
	   public int  EventoEliminar(int idevento) throws DAOExcepcion {
		   String query = "update evento set elog = '1' where idevento=?";
		   Connection con =null;
		   PreparedStatement stmt = null;
		   int i = 0;
		   try {
			   con = ConexionBDKaraoke.obtenerConexion();
			   stmt =con.prepareStatement(query);		   
			   stmt.setInt(1, idevento);
			   i = stmt.executeUpdate();
		       if(i !=1){
		    	  throw new SQLException("No se pudo Eliminar");
		       }		
		   } catch (SQLException e) {
		          System.err.println(e.getMessage());
		          throw new DAOExcepcion(e.getMessage());
		   }finally{
			   this.cerrarStatement(stmt);
			   this.cerrarConexion(con);
		   }
		   return i;
		   }
	
}
